import type { IPaginationResponse } from './pagination';

/**
 * API 响应基础接口
 * @description 所有 API 响应的基础结构
 */
export interface IApiResponse<T = unknown> {
  /** 响应状态码 */
  code: number;
  /** 响应消息 */
  message: string;
  /** 响应数据 */
  data: T;
  /** 响应时间戳 */
  timestamp: number;
  /** 请求ID */
  requestId?: string;
}

/**
 * API 成功响应
 * @description 成功响应的类型定义
 */
export interface IApiSuccessResponse<T = unknown> extends IApiResponse<T> {
  code: 200;
  message: string;
  data: T;
}

/**
 * API 错误响应
 * @description 错误响应的类型定义
 */
export interface IApiErrorResponse extends IApiResponse<null> {
  code: number;
  message: string;
  data: null;
  /** 错误详情 */
  error?: {
    /** 错误类型 */
    type: string;
    /** 错误详细信息 */
    details?: string;
    /** 错误堆栈（开发环境） */
    stack?: string;
  };
}

/**
 * API 分页响应
 * @description 分页数据的 API 响应
 */
export interface IApiPaginatedResponse<T> extends IApiSuccessResponse<IPaginationResponse<T>> {}

/**
 * API 请求配置
 * @description API 请求的配置选项
 */
export interface IApiRequestConfig {
  /** 请求超时时间（毫秒） */
  timeout?: number;
  /** 请求头 */
  headers?: Record<string, string>;
  /** 是否显示加载状态 */
  showLoading?: boolean;
  /** 是否显示错误提示 */
  showError?: boolean;
  /** 错误重试次数 */
  retryCount?: number;
}

/**
 * 批量操作请求
 * @description 批量操作的请求参数
 */
export interface IBatchRequest<T = string> {
  /** 操作的ID列表 */
  ids: T[];
  /** 操作类型 */
  action: 'delete' | 'update' | 'activate' | 'deactivate';
  /** 操作参数 */
  params?: Record<string, unknown>;
}

/**
 * 批量操作响应
 * @description 批量操作的响应结果
 */
export interface IBatchResponse<T = string> {
  /** 成功的ID列表 */
  success: T[];
  /** 失败的ID列表 */
  failed: T[];
  /** 失败详情 */
  errors?: Array<{
    id: T;
    error: string;
  }>;
}

/**
 * 文件上传响应
 * @description 文件上传的响应数据
 */
export interface IFileUploadResponse {
  /** 文件ID */
  fileId: string;
  /** 文件名 */
  fileName: string;
  /** 文件大小（字节） */
  fileSize: number;
  /** 文件类型 */
  fileType: string;
  /** 文件URL */
  fileUrl: string;
  /** 上传时间 */
  uploadTime: number;
}

/**
 * 导入导出响应
 * @description 数据导入导出的响应
 */
export interface IImportExportResponse {
  /** 任务ID */
  taskId: string;
  /** 任务状态 */
  status: 'pending' | 'processing' | 'completed' | 'failed';
  /** 处理进度（0-100） */
  progress: number;
  /** 结果信息 */
  result?: {
    /** 成功数量 */
    successCount: number;
    /** 失败数量 */
    failedCount: number;
    /** 错误详情 */
    errors?: string[];
  };
}